package estadosUsuario;

import java.util.Calendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import sistema.AreaDeInteres;
import sistema.Sistema;
import sistema.Usuario;
import callForPapers.CallForPaper;
import callForPapers.Paper;

public class Logueado extends EstadoUsuario {
	
		
	public void desLoguerse(Usuario usuario) {
		usuario.setEstado(new DesLogueado());
	}
	

	public void crearCallForPaper(String nombre, Calendar fechaTopeDePresentacion,
			Calendar fechaTopeRevision, Set<AreaDeInteres> areasDeInteres, Usuario usuario ) {
		
				Sistema.getInstance().agregarCfp(
				new CallForPaper(usuario,nombre,fechaTopeDePresentacion,
				fechaTopeRevision, areasDeInteres,Sistema.getInstance())
				);
	}
	
	public void crearCallForPaper(String nombre, Calendar fechaTopeDePresentacion,
			Calendar fechaTopeRevision, AreaDeInteres areasDeInteres, Usuario usuario ) {
		
		Sistema.getInstance().agregarCfp(
				new CallForPaper(usuario,nombre,fechaTopeDePresentacion,
				fechaTopeRevision, areasDeInteres,Sistema.getInstance())
				);
	}
	
	public List<Usuario> filtrarRevisoresPorAfinidad(CallForPaper callForPaper){
		return callForPaper.posiblesRevisores();
	}
	
	public Map<String, Set<CallForPaper>>verAsignacionesACFP(Usuario usuario){

		Map<String, Set<CallForPaper>> map = new HashMap<String, Set<CallForPaper>>();

		map.put("Soy Revisor" , new HashSet<CallForPaper>() );
		map.put("Soy Autor" , new HashSet<CallForPaper>() );

			for(Paper  paper : usuario.getPapersARevisar() ){
				map.get("Soy Revisor").add(Sistema.getInstance().cfpAlQuePertenezco(paper));
			}
			
			Set<Paper> papersAutor = Sistema.getInstance().papersAutor(usuario);
			
			for (Paper paper : papersAutor){
				
				map.get("Soy Autor").add(Sistema.getInstance().cfpAlQuePertenezco(paper));
				
			}
		return map;	
		}
	
	@Override
	public void agregarRevisor(Usuario usuario, CallForPaper cfp) {
		cfp.agregarRevisor(usuario);
		
	}
	
}
